(function(window){
	"use strict";
    /**
     * 把array结构变为树形结构
     * 需要数组元素具有id和pid属性，来表示父子关系
     * 
     * 转换后树节点结构如下:
     * {
     * id:'xxx',//节点id
     * pid:'yyy'//父节点id
     * parent:{}//父节点对象
     * children:[{},{}]
     * }
     * @param {Array} arr 要转换的数组
     * @return {Array} 树的所有根节点
     * 没有父节点id的元素认为是根节点
     */
    Array.toTree=function (arr) {
        //保存所有node的map
        var nodeMap = {};
        //保存所有根节点
        var roots = [];
        //找到所有根节点
        arr.filter(function (e) {
        	//所有节点放入map中，键为节点id，值为节点
            nodeMap[e.id] =e;
            //如果元素存在父节点后续处理
            if (e.pid===null||typeof e.pid==="undefined") {
            	//保存根节点
                roots.push(e);
                //不进行后续步骤
                return false;
            }
            return true;
        }).forEach(function (child) {
            var parent = nodeMap[child.pid];
            //能找到父元素，才处理
            if(parent){
            	if (parent.children) {
                    parent.children.push(child);
                } else {
                    parent.children = [child];
                }
            	child.parent=parent;
            }
        });
        return roots;
    };
})(window);